Visual lab

Feature · mcp-skills

MCP and skills

Blutui Context: a Courier MCP server and agent skills that teach any AI assistant to build Blutui projects properly.

shipped 4 variants On the board →
v1

Agent run

once one pass, holds

One prompt shown as the trail it leaves: the skill loads, three MCP calls land and a layout is written, each step pending then ticking citron. The feature as a receipt.

views/components/visuals/mcp-skills/v1.html

Static · three placements

Bento card · 320px Static
Blutui Context — Agent run Fig. 13
You

Add a team page backed by a collection.

Skill blutui-project-guidelines → rules/collections.md loaded
MCP search_blutui_documentation("collections") 3 docs
MCP create_collection("team") created
MCP create_page("/team", "layouts/team.html") 201
Write views/layouts/team.html 42 lines
courier mcp server Done · 3 calls · 1 file Running…
Feature row · 560px Static
Blutui Context — Agent run Fig. 13
You

Add a team page backed by a collection.

Skill blutui-project-guidelines → rules/collections.md loaded
MCP search_blutui_documentation("collections") 3 docs
MCP create_collection("team") created
MCP create_page("/team", "layouts/team.html") 201
Write views/layouts/team.html 42 lines
courier mcp server Done · 3 calls · 1 file Running…
Hero figure · 880px Static
Blutui Context — Agent run Fig. 13
You

Add a team page backed by a collection.

Skill blutui-project-guidelines → rules/collections.md loaded
MCP search_blutui_documentation("collections") 3 docs
MCP create_collection("team") created
MCP create_page("/team", "layouts/team.html") 201
Write views/layouts/team.html 42 lines
courier mcp server Done · 3 calls · 1 file Running…

Animated · once

Feature row · 560px
Blutui Context — Agent run Fig. 13
You

Add a team page backed by a collection.

Skill blutui-project-guidelines → rules/collections.md loaded
MCP search_blutui_documentation("collections") 3 docs
MCP create_collection("team") created
MCP create_page("/team", "layouts/team.html") 201
Write views/layouts/team.html 42 lines
courier mcp server Done · 3 calls · 1 file Running…
v2

With and without

once one pass, holds

The same task answered twice. A generic assistant posts a raw form to nowhere; with Blutui Context it writes the form tag. Both type in, then the left is hatched out and the right gets its rule.

views/components/visuals/mcp-skills/v2.html

Static · three placements

Bento card · 320px Static
Blutui Context — "Build the contact form" Fig. 14

Any assistant

<form action="/api/contact">

<input name="email">

<input name="message">

<button>Send</button>

</form>

Posts to nowhere · no spam scan

With Blutui Context

{% form 'contact' %}

{% for field in form.fields %}

{{ ui.field(field) }}

{% endfor %}

{% endform %}

Submissions in the console · AI scan on

skill · blutui-project-guidelines / forms.md courier mcp
Feature row · 560px Static
Blutui Context — "Build the contact form" Fig. 14

Any assistant

<form action="/api/contact">

<input name="email">

<input name="message">

<button>Send</button>

</form>

Posts to nowhere · no spam scan

With Blutui Context

{% form 'contact' %}

{% for field in form.fields %}

{{ ui.field(field) }}

{% endfor %}

{% endform %}

Submissions in the console · AI scan on

skill · blutui-project-guidelines / forms.md courier mcp
Hero figure · 880px Static
Blutui Context — "Build the contact form" Fig. 14

Any assistant

<form action="/api/contact">

<input name="email">

<input name="message">

<button>Send</button>

</form>

Posts to nowhere · no spam scan

With Blutui Context

{% form 'contact' %}

{% for field in form.fields %}

{{ ui.field(field) }}

{% endfor %}

{% endform %}

Submissions in the console · AI scan on

skill · blutui-project-guidelines / forms.md courier mcp

Animated · once

Feature row · 560px
Blutui Context — "Build the contact form" Fig. 14

Any assistant

<form action="/api/contact">

<input name="email">

<input name="message">

<button>Send</button>

</form>

Posts to nowhere · no spam scan

With Blutui Context

{% form 'contact' %}

{% for field in form.fields %}

{{ ui.field(field) }}

{% endfor %}

{% endform %}

Submissions in the console · AI scan on

skill · blutui-project-guidelines / forms.md courier mcp
c1

Allow the tool call

cutout

once one pass, holds

Cutout on a citron ground: an assistant panel in an editor, cropped so the editor runs off the left and the window off the bottom. The skill has loaded its rules and the assistant asks to run create_collection; the cursor arrives on Allow and presses, the collection lands and the Canvas loop types itself into team.html beside it. At card width the editor is cropped away and the panel fills the frame.

views/components/visuals/mcp-skills/c1.html

Static · three placements

Bento card · 320px Static
takahe — views/layouts/team.html
team.html default.html views/layouts

{% extends 'templates/default.html' %}

 

{% set team = cms.collection('team') %}

 

{% block body %}

<section class="mx-auto max-w-5xl px-6 py-20">

<h1>The team</h1>

<div class="mt-12 grid gap-10 @3xl:grid-cols-3">

{% for person in team %}

<article>

<p>{{ person.name }}</p>

<p>{{ person.role }}</p>

</article>

{% endfor %}

</div>

</section>

{% endblock %}

Assistant blutui

Add a team page backed by a collection.

Skill blutui-project-guidelines loaded
blutui wants to run a tool Awaiting you Allowed

create_collection

handle: "team"

fields: name, role, photo, email

Deny Allow
Collection team created · 4 fields
MCP create_page("/team") 201
Write views/layouts/team.html 42 lines

The page renders the collection with a Canvas loop, the way the Blutui rules ask for it.

Ask anything…
Feature row · 560px Static
takahe — views/layouts/team.html
team.html default.html views/layouts

{% extends 'templates/default.html' %}

 

{% set team = cms.collection('team') %}

 

{% block body %}

<section class="mx-auto max-w-5xl px-6 py-20">

<h1>The team</h1>

<div class="mt-12 grid gap-10 @3xl:grid-cols-3">

{% for person in team %}

<article>

<p>{{ person.name }}</p>

<p>{{ person.role }}</p>

</article>

{% endfor %}

</div>

</section>

{% endblock %}

Assistant blutui

Add a team page backed by a collection.

Skill blutui-project-guidelines loaded
blutui wants to run a tool Awaiting you Allowed

create_collection

handle: "team"

fields: name, role, photo, email

Deny Allow
Collection team created · 4 fields
MCP create_page("/team") 201
Write views/layouts/team.html 42 lines

The page renders the collection with a Canvas loop, the way the Blutui rules ask for it.

Ask anything…
Hero figure · 880px Static
takahe — views/layouts/team.html
team.html default.html views/layouts

{% extends 'templates/default.html' %}

 

{% set team = cms.collection('team') %}

 

{% block body %}

<section class="mx-auto max-w-5xl px-6 py-20">

<h1>The team</h1>

<div class="mt-12 grid gap-10 @3xl:grid-cols-3">

{% for person in team %}

<article>

<p>{{ person.name }}</p>

<p>{{ person.role }}</p>

</article>

{% endfor %}

</div>

</section>

{% endblock %}

Assistant blutui

Add a team page backed by a collection.

Skill blutui-project-guidelines loaded
blutui wants to run a tool Awaiting you Allowed

create_collection

handle: "team"

fields: name, role, photo, email

Deny Allow
Collection team created · 4 fields
MCP create_page("/team") 201
Write views/layouts/team.html 42 lines

The page renders the collection with a Canvas loop, the way the Blutui rules ask for it.

Ask anything…

Animated · once

Feature row · 560px
takahe — views/layouts/team.html
team.html default.html views/layouts

{% extends 'templates/default.html' %}

 

{% set team = cms.collection('team') %}

 

{% block body %}

<section class="mx-auto max-w-5xl px-6 py-20">

<h1>The team</h1>

<div class="mt-12 grid gap-10 @3xl:grid-cols-3">

{% for person in team %}

<article>

<p>{{ person.name }}</p>

<p>{{ person.role }}</p>

</article>

{% endfor %}

</div>

</section>

{% endblock %}

Assistant blutui

Add a team page backed by a collection.

Skill blutui-project-guidelines loaded
blutui wants to run a tool Awaiting you Allowed

create_collection

handle: "team"

fields: name, role, photo, email

Deny Allow
Collection team created · 4 fields
MCP create_page("/team") 201
Write views/layouts/team.html 42 lines

The page renders the collection with a Canvas loop, the way the Blutui rules ask for it.

Ask anything…
Tune · ground and placement
Ground
Place

Overrides none — the file's own defaults

k1

Prompt to prototype

concept

once one pass, holds

Concept on a citron ground: the prompt in an assistant panel, Blutui Context drawn on the ground as a dashed frame holding its two skills and three MCP tools, and the prototype it builds on localhost:8080/spring. The prompt types in, a wire carries it into Context, the skills and tools tick in order, the prototype opens and its parts land one by one, each wired back to the tool that made it (the canopy blocks skill to the hero, create_collection to the products, create_form to the enquiry form) and labelled as the Canopy editor labels blocks. At card width the prototype and its wires fill the frame. The same Weka page runs on into design-handoff.

views/components/visuals/mcp-skills/k1.html

Static · three placements

Bento card · 320px Static
Assistant

Prototype a spring landing page for Weka, with products and an enquiry form.

Working with Blutui Context…

Prototype ready at localhost:8080/spring

Ask anything…

Any AI assistant

Blutui Context

Skills

blutui-project-guidelines blutui-canopy-blocks

MCP

create_page create_collection create_form
localhost:8080/spring
Weka
hero · block

Spring range

Shop now
products · collection

New this season

$48
$36
$52
enquiry · form

Ask us anything

NameEmail
MessageSend
Feature row · 560px Static
Assistant

Prototype a spring landing page for Weka, with products and an enquiry form.

Working with Blutui Context…

Prototype ready at localhost:8080/spring

Ask anything…

Any AI assistant

Blutui Context

Skills

blutui-project-guidelines blutui-canopy-blocks

MCP

create_page create_collection create_form
localhost:8080/spring
Weka
hero · block

Spring range

Shop now
products · collection

New this season

$48
$36
$52
enquiry · form

Ask us anything

NameEmail
MessageSend
Hero figure · 880px Static
Assistant

Prototype a spring landing page for Weka, with products and an enquiry form.

Working with Blutui Context…

Prototype ready at localhost:8080/spring

Ask anything…

Any AI assistant

Blutui Context

Skills

blutui-project-guidelines blutui-canopy-blocks

MCP

create_page create_collection create_form
localhost:8080/spring
Weka
hero · block

Spring range

Shop now
products · collection

New this season

$48
$36
$52
enquiry · form

Ask us anything

NameEmail
MessageSend

Animated · once

Feature row · 560px
Assistant

Prototype a spring landing page for Weka, with products and an enquiry form.

Working with Blutui Context…

Prototype ready at localhost:8080/spring

Ask anything…

Any AI assistant

Blutui Context

Skills

blutui-project-guidelines blutui-canopy-blocks

MCP

create_page create_collection create_form
localhost:8080/spring
Weka
hero · block

Spring range

Shop now
products · collection

New this season

$48
$36
$52
enquiry · form

Ask us anything

NameEmail
MessageSend
Tune · ground and placement
Ground
Place

Overrides none — the file's own defaults